/*
 * @Author: your name
 * @Date: 2021-10-20 22:12:49
 * @LastEditTime: 2021-10-20 22:14:36
 * @LastEditors: your name
 * @Description: In User Settings Edit
 * @FilePath: \mansion_safe_web\plugins\axios\index.js
 */


export default function ({ $axios }) {
    // 接口请求时
    $axios.onRequest(config => {
        // 如果是客户端且是请求本地 NODE 接口时，则设置指定基础路径

        // GET 请求避免缓存
        if (/get/i.test(config.method)) {
            config.params = config.params || {};
            // 添加时间戳
            config.params._ = new Date().getTime();
        }

        return config;
    });

    // 请求错误时
    $axios.onError(function (error) {
        // 返回一个空的 Promise，避免页面内的 catch 被调用
        const EmptyPromise = new Promise(() => {});
        const code = parseInt(error.response && error.response.status);

        // 异常请求，
        if (isNaN(code)) {
            return EmptyPromise;
        }
        if (code === 401 || (typeof error.response === "string" && error.response.includes("401") > -1)) {
            // 判断是否已显示过超时提示
            // 注意事项：
            // 1：后期可使用 Vuex 来控制 isDisplayedTimeoutMsg
            // 2：top.isDisplayedTimeoutMsg 需要配合 logout 中跳转刷新页面的功能；若后期改为 Vuex 来控制，需要控制此状态的刷新(登录、退出、刷新等操作)
            if (!top.isDisplayedTimeoutMsg) {
                // 修改 isDisplayedTimeoutMsg 状态，防止多次弹出
                top.isDisplayedTimeoutMsg = true;
                // 错误提示
                top.$nuxt.$message.error("登录超时，请重新登录...");
                // 1.5秒后，退出登录
            }

            return EmptyPromise;
        }
    });
}
